home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / net / spakparnet_0_5.lha / srv / nfsfreelock.c < prev    next >
C/C++ Source or Header  |  1992-11-09  |  3KB  |  89 lines

  1. /********************************************************************
  2.  ** NETWORK FILE SYSTEM SERVICE
  3.  **
  4.  ** (c) Spak, Darrell Tam, c9107253@ee.newcastle.edu.au (1994)
  5.  ** phone (Australia) 049-829-710
  6.  **                    49-829-710
  7.  ** (c) SST Jan-Feb-Mar 1994
  8.  **
  9.  ** "FREELOCK" file support
  10.  **
  11.  ** TABS to 4
  12.  ********************************************************************/
  13.  
  14. #include "/snd/everything.h"
  15. #include <st/st_proto.h>
  16.  
  17. #include "nfsinternal.h"
  18. #include "nfsglobs_protos.h"
  19.  
  20.  
  21. struct FreeLockDosMsg {
  22.     struct DosMsg    dm;
  23.     struct NFSStdReturn freelockret;                /* net-send this back */
  24.     struct PktMsgRecv    *pmr;
  25.     struct InternalLock *il;
  26. };
  27. #define FREELOCKMSG_SIZE sizeof(struct FreeLockDosMsg)
  28.  
  29.  
  30. /********************************************************************/
  31.     static void free_retret_freelock(struct PktMsgRecv *pmr)
  32. /********************************************************************/
  33. {
  34. struct FreeLockDosMsg    *fldm = (void *)pmr->user.user2;
  35. struct InternalLock        *il = fldm->il;
  36.  
  37. #ifdef DEBUG
  38.     fpf(out, "nfs_freelock: Freeing memory\n");
  39. #endif
  40.  
  41.     REMOVE_FROM_LIST(il, il_first);
  42.     FreeMem(il, IL_SIZE);
  43.     FreeMem(fldm, FREELOCKMSG_SIZE);            /* dos msg */
  44.     FREE_PKTMSGRECV(pmr);                        /* server msg */
  45. }
  46.  
  47.  
  48. /********************************************************************/
  49.     static void handle_freelock(struct FreeLockDosMsg *fldm)
  50. /********************************************************************/
  51. {
  52. struct PktMsgRecv *pmr = fldm->pmr;
  53.  
  54.     fldm->freelockret.remote_res1 = fldm->dm.sp.sp_Pkt.dp_Res1;
  55.     fldm->freelockret.remote_res2 = fldm->dm.sp.sp_Pkt.dp_Res2;
  56.     PUT_STDMSG(&pmr->pm.smsg, pmr->dmaport, TYPE_INTERNAL_SEND);
  57.  
  58. #ifdef DEBUG
  59.     fpf(out, "nfs_freelock: return going home\n");
  60. #endif
  61. }
  62.  
  63.  
  64. /********************************************************************/
  65.     void *srv_freelock(struct PktMsgRecv *pmr)
  66. /********************************************************************/
  67. {
  68. struct NFSFreeLock        *req = (void *)pmr->req_body;
  69. struct InternalLock        *il = GET_INTERNALLOCK(req->remote_il, req->remote_majic);
  70. struct FreeLockDosMsg    *fldm;
  71.  
  72.     if(!il) return(&nfs_res_ok);                /* filehandle doesn't exist! */
  73.     ACT_ALLOCMSG_THINGY(fldm, FREELOCKMSG_SIZE);    /* get dosmsgpkt+return memory */
  74.  
  75.  
  76. #ifdef DEBUG
  77.     fpf(out, "nfs_freelock: lock=%lx, port=%lx\n", il, il->reallock->fl_Task);
  78. #endif
  79.  
  80.     fldm->pmr = pmr;
  81.     fldm->il = il;
  82.     ACT_INIT_RETURN_PMR(pmr, free_retret_freelock, fldm, &fldm->freelockret, req);
  83.     INIT_DOS_MSG(&fldm->dm, dosport, handle_freelock);
  84.     fldm->dm.sp.sp_Pkt.dp_Type = ACTION_FREE_LOCK;
  85.     fldm->dm.sp.sp_Pkt.dp_Arg1 = CTOB(il->reallock);
  86.     PutMsg(il->reallock->fl_Task, fldm);
  87.     return(NULL);
  88. }
  89.